async function async1() {
    console.log('async1 start');
    await async2();
    console.log('async1 end')   // 微1
};

async function async2() {
    console.log('async2');
};

console.log('script start');

setTimeout(function() {    // 宏1
    console.log('setTimeout');
}, 0);

async1();

new Promise(function(resolve) {
    console.log('promise1');
    resolve();
}).then(function() {    // 微2
    console.log('promise2');
});

console.log('script end');

// script start -> async1 start -> async2 -> promise1
// -> script end -> async1 end -> promise2 -> setTimeout